package com.kunzai;

import com.kunzai.server.pojo.Dish;
import com.kunzai.server.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;
import java.util.*;

/**
 * Redis数据类型测试
 */
@SpringBootTest
@Slf4j
//@RunWith(SpringJUnit4ClassRunner.class)
public class RedisTestOne {

    @Resource
    private RedisTemplate<Object,Object> redisTemplate;

    @Autowired
    private DishService dishService;


    @Test
    public void TestDishNme(){
         Dish dish = dishService.selectName(null);
        System.err.println(dish);
    }


    /**
     * String类型的测试
     */
    @Test
    public void TestString(){
        redisTemplate.opsForValue().set("回龙小学","王鸿坤");
    }


    /**
     * Stream 流的使用
     */
    @Test
    public void testListRunTime(){
         Set<Dish> x = dishService.selectLike("辣");
        System.out.println(x);
    }

    /**
     * list 数据类型的车市
     */
    @Test
    public void testRedisList(){
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            list.add(i);
        }
        //左存
//        redisTemplate.opsForList().leftPush("listKeyOne",list);
        //右取
        ArrayList<Integer> listKeyOne = (ArrayList<Integer>) redisTemplate.opsForList().rightPop("listKeyOne");
        Iterator<Integer> iterator = listKeyOne.iterator();
        while (iterator.hasNext()==true){
            System.out.println(iterator.next());
        }
    }

    /**
     * Hash数据类型的测试
     */
    @Test
    public void TestRedisHash(){
        //key 和 filed 形成映射
        redisTemplate.opsForHash().put("hashOne","kunzaiOne","去死");
        /**
         * 取出数据的话要根据
         * key filed 映射关系去取
         */
        String  hashString = (String) redisTemplate.opsForHash().get("hashOne", "kunzaiOne");
        System.err.println(hashString);
    }
    /**
     * 测试zset的数据类型
     */
    @Test
    public void TestZsetRedids(){
        /**
         * 无需且去重
         */
//        redisTemplate.opsForSet().add("SetOne",1);
//        redisTemplate.opsForSet().add("SetOne",1);
//        redisTemplate.opsForSet().add("SetOne",1);
//        redisTemplate.opsForSet().add("SetOne",3);
//        redisTemplate.opsForSet().add("SetOne",2);
//        redisTemplate.opsForSet().add("SetOne",4);


        //取出数据
        Set<Object> setOne =  redisTemplate.opsForSet().members("SetOne");
        System.err.println(setOne);
    }
    /**
     * 测试Zset的数据类型
     */
    @Test
    public void TestZsetRedis(){
        /**测试Zset的数据类型无序且去重
         * 排序是根据分值进行排序
         * 分值我们暂且设置成时间戳
         */

        //取出元素
//        kunzaiT
        //查看有多少个元素
        Long SizeRun = redisTemplate.opsForZSet().size("kunzaiT");
        System.out.println(SizeRun);
        Set<Object> kunzaiT = redisTemplate.opsForZSet().range("kunzaiT", 0, SizeRun);
        kunzaiT.stream().forEach(a->{
            System.err.println(a);
        });
    }

    /**
     * ZSET数据类型里面的元素
     */
    private void addValue() {
        Date date = new Date();
        long Nowtime = date.getTime();
        redisTemplate.opsForZSet().add("kunzaiT",9, Nowtime);
        redisTemplate.opsForZSet().add("kunzaiT",2, Nowtime);
        redisTemplate.opsForZSet().add("kunzaiT",4, Nowtime);
        redisTemplate.opsForZSet().add("kunzaiT",1, Nowtime);
        redisTemplate.opsForZSet().add("kunzaiT",1, Nowtime);
        redisTemplate.opsForZSet().add("kunzaiT",98, Nowtime);
    }


    @Test
    public void testSetNx(){

    }


}






